package pro.cherish.dao.redis.hellper;

import java.util.concurrent.TimeUnit;

/**
 * @author 创建人：cherish
 * @version 版本号：V1.0
 * <p>
 * ***************************修订记录************************************
 * 2019-11-02 cherish 创建该类功能。
 * **********************************************************************
 * </p>
 * @ClassName 类名：IBasicRedisTemplate
 * @Description 功能说明：
 * <p>
 * TODO
 * </p>
 * **********************************************************************
 * @date 创建日期： 2019-11-02 cherish
 */
public interface IBasicRedisTemplate {

    /**
     * 设置值，当且仅当键不存在时
     * @param key
     * @param value
     * @return true 成功，false 失败
     */
    boolean setNx(String key, String value);
    /**
     * 设置值
     * @param key
     * @param value
     * @return true 成功，false 失败
     */
    void set(String key, String value);

    /**
     * 设置值
     * @param key
     * @param value
     * @param timeout 过期时间
     * @param unit 时间类型
     *
     */
    void set(String key, String value, long timeout, TimeUnit unit);

    /**
     * 将key 的值设为 value ,当且仅当 key 不存在 setNx
     * @param key
     * @param value
     */
    void setIfAbsent(String key, String value);


    /**
     * 获取一个值，不存在则返回null
     * @param key
     * @return
     */
    String get(String key);
    /**
     * 通过key删除，并返回删除的个数
     * @param key
     * @return
     */
    long del(String... key);
    /**
     * 更新缓存时间
     * @param key
     * @param seconds
     * @return
     */
    boolean expire(String key, long seconds);
    /**
     * 累加1数量
     * @param key
     * @return
     */
    long incr(String key);
    /**
     * 累加val数量
     * @param key
     * @param num
     * @return
     */
    long incr(String key, long num);
    /**
     * 获取key对应的数量
     * @param key
     * @return
     */
    long getNum(String key);
    /**
     * 检查是否连接成功
     *
     * @return
     */
    String ping();
    /**
     * 将一个 member 元素加入到集合 key 当中，已经存在于集合的 member 元素将被忽略。
     * 假如 key 不存在，则创建一个只包含 member 元素作成员的集合。
     * @param key
     * @param member
     * @return 被添加到集合中的新元素的数量，不包括被忽略的元素。
     */
    long sadd(String key, String member);
    /**
     * 移除集合 key 中的一个或多个 member 元素，不存在的 member 元素会被忽略。
     * @param key
     * @param member
     * @return 被成功移除的元素的数量，不包括被忽略的元素。
     */
    long sremove(String key, String member);
}

